from contextlib import asynccontextmanager
from app.config.config import DEFAULT_MODEL_PROVIDER, ENABLE_ASR_MODEL, ENABLE_MCP_TOOLS
from app.core.ai_core import create_ai_core_with_mcp, AICore
from app.utils.logger import Logger
from app.utils.project_info import display_project_info
from app.utils.asr_mode import ASRService
from app.utils.network_utils import get_local_ip

# 创建日志记录器
logger = Logger("LifespanManager")

@asynccontextmanager
async def lifespan(app):
    """应用生命周期管理"""
    # 初始化MCP工具（如果启用）
    if ENABLE_MCP_TOOLS:
        logger.info("正在初始化MCP工具...")
        ai_core = await create_ai_core_with_mcp(model_provider=DEFAULT_MODEL_PROVIDER)
        # 将AI核心实例存储在应用状态中
        app.state.ai_core = ai_core
        logger.info(f"MCP工具初始化完成，使用 {DEFAULT_MODEL_PROVIDER} 模型提供商，获取到 {len(ai_core.tools)} 个工具")
    else:
        logger.info("MCP工具初始化已禁用，创建基础AI核心...")
        # 创建不带MCP工具的AI核心
        ai_core = AICore(model_provider=DEFAULT_MODEL_PROVIDER)
        app.state.ai_core = ai_core
        logger.info(f"基础AI核心初始化完成，使用 {DEFAULT_MODEL_PROVIDER} 模型提供商")
    
    # 在应用启动时初始化ASR模型（根据配置决定是否启用）
    if ENABLE_ASR_MODEL:
        logger.info("正在初始化ASR语音识别模型...")
        try:
            asr_service = ASRService()
            # 将ASR服务实例存储在应用状态中
            app.state.asr_service = asr_service
            logger.info("语音识别模型加载成功")
            logger.info("ASR语音识别模型初始化完成")
        except Exception as e:
            logger.error(f"ASR语音识别模型初始化失败: {e}")
            # 即使ASR模型初始化失败，我们仍然继续启动应用
            app.state.asr_service = None
    else:
        logger.info("ASR语音识别模型初始化已禁用")
        app.state.asr_service = None
    
    # 所有初始化完成后，显示项目信息和艺术字体
    from app.config.config import HOST, PORT, API_KEY
    display_project_info(get_local_ip(), PORT, API_KEY, DEFAULT_MODEL_PROVIDER, ENABLE_ASR_MODEL, ENABLE_MCP_TOOLS)
    
    yield
    
    # 关闭时的清理工作
    logger.info("应用正在关闭...")